;　PAGE 50,70　
;ORG 120H 
;;----------------------------------------------------
DATA SEGMENT PARA 'DAT'
    A1 DB 12H, 34H, 56H, 78H, 9AH, 0BCH,0DEH,0F0H
    DB　
    B1=8;赋值伪指令, 求A1 (符号地址)到当前汇编指针地址 (＄)的字节数
    B2=B1*2;求2倍B1
    A2 DB 16 DUP(0);数据重复定义伪指令, 定义ASCII码字符区
DATA ENDS　
;----------------------------------------------------
STACK SEGMENT PARA STACK 'STA'
    STA1 DW 100 DUP (?)　
STACK ENDS   
;emu8086中不需要设置stack
;　----------------------------------------------------
CODE SEGMENT PARA 'CODE'
　ASSUME　CS:CODE, DS:DATA, SS:STACK
　STAR PROC　FAR
　PUSH　DS 
;默认DS,CS,ES在一个段内
　;XOR　AX, AX
　;PUSH　AX   

    MOV　AX, DATA     ;按照原程序，执行，MOV AX,DAT,默认DAT 为10H。
    MOV　DS, AX
    
    MOV　SI, OFFSET A1
    MOV　DI, OFFSET A2
    MOV　CX, B1
    G1:MOV　BL, 2
    MOV　AL, [SI]
    MOV　BH, AL
    PUSH　CX
    MOV　CL, 4
    ROR　AL, CL
    POP　CX  
 ;需要清除AF  因为DAA调整时，根据al和AF的值来调整。
 push ax
 mov ah,0
 sahf
 pop ax
 
G2N: AND　AL, 0FH
　DAA　　;对AL两位十进制数 (BCD)调整　
　ADD　AL, 0F0H
　ADC　AL, 40H
　MOV　[DI], AL
　INC　DI
　MOV　AL, BH
　DEC　BL
  JNZ G2N
　INC　SI
　LOOP G1
　MOV SI,OFFSET A2　;A2的偏移地址送SI寄存器
　MOV CX,B2
　CALL　P1 
hlt
RET
;-----------------------------------------
;显示ASCII码字符子程序如下:   
;　　　　子程序名: P1
;功能: 显示ASCII码字符
;入口: SI指向ASCII码区
;CX是ASCII码区长 
P1　PROC
　  MOV　BL, 2
G:　MOV　DL, [SI]
　　MOV　AH, 2
　　INT　21H
　　INC　SI
　　DEC　BL
　　JNZ T
　　MOV　DL, ' '
　　MOV　AH, 2
　　INT　21H
　　MOV　BL, 2
T:　LOOP G
　　RET
P1　ENDP
;--------------------------------------
　　CODE　ENDS
END　STAR